package top.lixunda.ecommerce.server.user.api.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import top.lixunda.commerce.common.core.entity.MessageObject;
import top.lixunda.common.validate.XumValid;
import top.lixunda.ecommerce.server.user.api.entity.db.StoreAddressDO;
import top.lixunda.ecommerce.server.user.api.entity.dto.StoreAddressChgDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.StoreAddressInsertDTO;

import java.util.List;

/**
 * @author Xumda
 * @version time:2019/12/14 17:03
 * <p>
 * 商铺用户地址管理
 */
@Api("商铺用户地址管理")
@RequestMapping("/storeAddress")
public interface IStoreAddressController {

    /**
     * 获取用户默认地址，不存在默认地址返回null
     *
     * @return 用户默认地址，不存在默认地址返回null
     */
    @ApiOperation("获取用户默认地址，不存在默认地址返回null")
    @GetMapping("queryDefaultStoreAddress")
    MessageObject<StoreAddressDO> queryDefaultStoreAddress();

    /**
     * 根据id查询地址信息
     *
     * @param id 用户地址id
     * @return 用户地址，不存在返回null
     */
    @GetMapping("queryAddressById")
    MessageObject<StoreAddressDO> queryAddressById(@RequestParam("id") Long id);

    /**
     * 获取用户保存的所有地址信息
     *
     * @return 用户的所有地址信息列表
     */
    @GetMapping("queryAllStoreAddress")
    MessageObject<List<StoreAddressDO>> queryAllStoreAddress();

    /**
     * 插入新的商铺用户地址信息
     *
     * @param storeAddressInsertDTO 插入商铺用户地址信息DTO
     * @return 返回插入成功的地址信息
     */
    @PostMapping("insertStoreAddress")
    MessageObject<StoreAddressDO> insertStoreAddress(@RequestBody @XumValid StoreAddressInsertDTO storeAddressInsertDTO);

    /**
     * 更改商铺用户地址信息
     *
     * @param storeAddressChgDTO 商铺用户地址信息DTO
     * @return 更新后的商铺用户地址信息
     */
    @PostMapping("updateStoreAddressById")
    MessageObject<StoreAddressDO> updateStoreAddressById(@RequestBody @XumValid StoreAddressChgDTO storeAddressChgDTO);

    /**
     * 根据id删除商铺用户地址信息，只能删除当前登陆商铺用户的地址信息
     *
     * @param id 用户地址信息唯一Id
     * @return 删除是否成功，始终为true
     */
    @GetMapping("deleteStoreAddressById")
    MessageObject<Boolean> deleteStoreAddressById(@RequestParam("id") Long id);

}
